1
การพัฒนาของอาร์เรย์ในซีพลัสพลัส
AI013Lesson 4
00:00

การเปลี่ยนผ่านจาก อาร์เรย์รูปแบบซี (C-style arrays) ไปยัง std::array แสดงถึงการเปลี่ยนแปลงอย่างสำคัญไปสู่ ความปลอดภัยของชนิดข้อมูล และ การเขียนโปรแกรมทั่วไป (Generic Programming) ในภาษาซีพลัสพลัสสมัยใหม่

1. ปัญหาการลดรูปของตัวชี้ (Pointer Decay Problem)

อาร์เรย์แบบดั้งเดิม (int arr[N]) มีปัญหา "การลดรูปของตัวชี้" เมื่อส่งไปยังฟังก์ชัน จะสูญเสียข้อมูลเมตาดาต้าขนาด และเปลี่ยนเป็นตัวชี้ดิบ (int*) ซึ่งนำไปสู่การคำนวณตัวชี้ที่ไม่ปลอดภัย และการล้นหน่วยความจำ (buffer overflow)

2. การปรับปรุงในซีพลัสพลัสเวอร์ชัน 11

std::array ให้บริการโดยหุ่นยนต์บางๆ, หุ่นยนต์ที่ไม่มีค่าใช้จ่ายเพิ่มเติม รอบอาร์เรย์ดิบ พร้อมรวมเข้ากับสแตนดาร์ดเทมเพลตไลบรารี (STL) โดยคงกฎของ กฎของห้าประการ (Rule of Five).

ก่อนซีพลัสพลัส 11 (แบบดั้งเดิม)T[N]ลดรูปหลังซีพลัสพลัส 11 (สมัยใหม่)std::array<T, N>+ std::forward (ประสิทธิภาพ)

3. การส่งผ่านแบบสมบูรณ์ด้วย std::forward

ซีพลัสพลัส 11 ได้แนะนำ std::forward เพื่อให้มั่นใจว่า std::array วัตถุจะเคลื่อนผ่านหุ่นยนต์เทมเพลตโดยไม่เกิดการสำเนาซ้ำ ด้วยการใช้ประโยชน์จาก กฎการรวมตัวของตัวชี้อ้างอิง (Reference Collapsing Rules)เราจะคงหมวดหมู่ค่าของวัตถุ (ลูกค้าทางซ้ายหรือขวา)

$$T\&\& + \& \rightarrow T\&$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>